home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / program / swags_z.zip / STRINGS.SWG / 0091_Flipping a String.pas < prev    next >
Pascal/Delphi Source File  |  1994-08-24  |  2KB  |  81 lines

  1.  
  2. Procedure ReverseString(var s:string);
  3. var i,j:byte; c:char;
  4. begin
  5.  j:=Length(s);
  6.  for i:=1 to j div 2 do
  7.   begin
  8.    c:=s[i];
  9.    s[i]:=s[j];
  10.    s[j]:=c;
  11.    dec(j);
  12.   end;
  13. end;
  14.  
  15. { ---- BASM 'pointer oriented' version ------------------------------ }
  16. Procedure ReverseAString(var s:string); assembler;
  17. asm
  18.         lds SI,s
  19.         mov AL,[SI]
  20.         xor AH,AH
  21.         mov DI,SI
  22.         inc SI                  { SI points to start of s }
  23.         add DI,AX               { DI points to end of s }
  24.  
  25. @@0:    cmp SI,DI               { while SI=DI do ... }
  26.         jae @@1
  27.  
  28.         mov AL,[SI]
  29.         mov AH,[DI]
  30.         mov [SI],AH
  31.         mov [DI],AL
  32.         inc SI
  33.         dec DI
  34.         jmp @@0
  35. @@1:
  36. end;
  37.  
  38. { Version #2 }
  39.  
  40. Procedure ReverseAString(var s:string); assembler;
  41. asm
  42.                 push DS
  43.                 cld
  44.                 lds SI,s
  45.                 mov DI,SI
  46.                 lodsb
  47.                 xor AH,AH
  48.                 add DI,AX               { DI points to end of s }
  49. @ReverseLoop:   cmp SI,DI               { while SI=DI do ... }
  50.                 jae @ReverseExit
  51.                 mov AL,[SI]
  52.                 mov AH,[DI]
  53.                 mov [SI],AH
  54.                 mov [DI],AL
  55.                 inc SI
  56.                 dec DI
  57.                 jmp @ReverseLoop
  58. @ReverseExit:   pop DS
  59. end;
  60.  
  61. Function FlipStr(s:string):string; assembler;
  62. asm
  63.                 push DS
  64.                 cld
  65.                 les DI,@Result
  66.                 lds SI,s
  67.                 lodsb
  68.                 stosb
  69.                 mov CL,AL
  70.                 xor CH,CH
  71.                 add DI,CX
  72. @FlipLoop:      and CL,CL
  73.                 jz @FlipExit
  74.                 lodsb
  75.                 dec DI
  76.                 mov ES:[DI],AL
  77.                 dec CL
  78.                 jmp @FlipLoop
  79. @FlipExit:      pop DS
  80. end;
  81.